export default function transTree(nodeMsg) {
  // 定义空数组
  const targetMsg = []
  // 核心思路
  /* 1. 先遍历原数组,医院数组中的每一项的id作为对象的key,每一项本身作为对象的val形成一个对象的结构(map)
  2. 遍历原数组,使用数组中的每一项pid 区第一步形成的map 结构去匹配key(id) 如果匹配上 就把当前项放入找到节点的children属性中去,如果无法完成匹配 代表当前项就是最根上的父节点
  那就把当前项直接当道最终传出的targetMsg中去
  */
  // 1.定义空对象
  const map = {}

  // 2.遍历传入进来的数组,进行遍历
  nodeMsg.forEach((obj) => {
    // 3.遍历中将数组中的每一个对象,添加到map中
    // 键值对的形式添加   键: 每个对象的id  值:每一个具体的对象
    map[obj.id] = obj
    // 4.给每个具体的对象添加一个children属性为空数组
    obj.children = []
  })

  // 5.二次对数组进行遍历
  nodeMsg.forEach((obj) => {
    // 6.判断每个对象的pid是否为null
    if (map[obj.pid]) {
      // 如果进来代表当前对象有父元素,将其添加到父元素的children中
      map[obj.pid].children.push(obj)
    } else {
      // 如果进来代表当前对象没有父元素,添加到要返回的数组中
      targetMsg.push(obj)
    }
  })

  // 将结果return出去
  return targetMsg
}
